package crazyjava;

public class CacheImmutable {
    private final String name;
    private static CacheImmutable[] cache = new CacheImmutable[10];
    private static int pos = 0;

    public CacheImmutable(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public static CacheImmutable valueof(String name) {
        //遍历已缓存的对象
        for (int i = 0; i < pos; i++) {
            //如果已有相同实例,直接返回该缓存的实例
            if (cache[i] != null && cache[i].getName().equals(name)) {
                return cache[i];
            }
        }
        //如果缓存池已满
        if (pos == 10) {
            //把缓存的第一个对象覆盖,即把刚刚生成的对象放在缓存池的最开始位置
            cache[0] = new CacheImmutable(name);
            //把pos设为1
            pos = 1;
            return cache[0];
        } else {
            //把新建的对象缓存起来,pos加1
            cache[pos++] = new CacheImmutable(name);
            return cache[pos - 1];
        }
    }

    public boolean equals(Object obj) {
        if (obj instanceof CacheImmutable) {
            CacheImmutable ci = (CacheImmutable) obj;
            if (name.equals(ci.getName())) {
                return true;
            }
        }
        return false;
    }

    public int hashCode() {
        return name.hashCode();
    }

    public static void main(String[] args) {
        CacheImmutable c1 = CacheImmutable.valueof("hello");
        CacheImmutable c2 = CacheImmutable.valueof("hello");
        //下面代码将输出true
        System.out.println(c1 == c2);
    }

}
